﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Net.NetworkInformation;
using GIC.BO.Access;
using GIC.DAO.Model;
using System.Threading;

namespace GIC.UI
{
    public partial class SocketServer : Form
    {

        private GICBo bo = new GICBo();
        private Configuracoes configuracoes;
        private SocketThread socketThread;
        Parametros param;


        public SocketServer(Configuracoes configuracoes, SocketThread socketThread)
        {
            InitializeComponent();
            this.configuracoes = configuracoes;

            this.socketThread = socketThread;

            param = bo.obterParametro();

            txtPorta.Text = param.socketPorta.ToString();
            txtIP.Text = param.socketIP;
            txtDeviceID.Text = param.deviceID;
            this.TopMost = true;
        }

        private void buttonStartListen_Click(object sender, EventArgs e)
        {
            int porta;
            if ((this.txtPorta == null || this.txtPorta.Text == "") && (this.txtIP == null || this.txtIP.Text == ""))
            {
                MessageBox.Show("IP ou Porta não podem estar em branco!",
                                        "Socket",
                                        MessageBoxButtons.OK,
                                        MessageBoxIcon.Error,
                                        MessageBoxDefaultButton.Button1);

                return;
            }
            try
            {
                porta = Int16.Parse(this.txtPorta.Text);
            }
            catch
            {

                MessageBox.Show("Digite uma porta válida (Somente números)!",
                                            "Socket",
                                            MessageBoxButtons.OK,
                                            MessageBoxIcon.Error,
                                            MessageBoxDefaultButton.Button1);
                this.txtPorta.Focus();
                return;
            }

            //validar se porta nao está em uso

            IPGlobalProperties ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties();
            TcpConnectionInformation[] tcpConnInfoArray = ipGlobalProperties.GetActiveTcpConnections();

            foreach (TcpConnectionInformation tcpi in tcpConnInfoArray)
            {
                if (tcpi.LocalEndPoint.Port == porta && porta != param.socketPorta)
                {
                    MessageBox.Show("Porta já está em uso!",
                                                                "Socket",
                                                                MessageBoxButtons.OK,
                                                                MessageBoxIcon.Error,
                                                                MessageBoxDefaultButton.Button1);
                    this.txtPorta.Focus();
                    return;
                }
            }

            if ((this.txtDeviceID == null || this.txtDeviceID.Text == ""))
            {
                MessageBox.Show("Device ID é obrigatório!",
                                        "Socket",
                                        MessageBoxButtons.OK,
                                        MessageBoxIcon.Error,
                                        MessageBoxDefaultButton.Button1);
                this.txtDeviceID.Focus();

                return;
            }

    


            //if (porta != param.socketPorta)
            //{
                param.socketPorta = porta;
                param.socketIP = txtIP.Text;
                param.deviceID = txtDeviceID.Text;

                bo.salvar(param);
            //}



            MessageBox.Show("A aplicação será encerrada. Inicie novamente!",
                             "Socket",
                             MessageBoxButtons.OK,
                             MessageBoxIcon.Exclamation,
                             MessageBoxDefaultButton.Button1);

            Environment.Exit(0);

            
        }

        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            this.configuracoes.Enabled = true;
            //this.Close();
        }

       


    }

    
}
